# 函数多个返回值
def test():
    return 1, True, "123"


x, y, s = test()
print(x)
print(y)
print(s)


# 函数传参
# 位置参数
def test(name, age, gender):
    print(f"您的名字是{name},年龄是{age},性别是{gender}")


print("______位置参数_____")
test("王勇", 18, '男')
# 关键字参数,可以不按照固定顺序写
print("______关键字参数_____")
test(name='王勇', gender='男', age=18)
# 可以混用但是位置参数位置固定
test('王勇', age=18, gender='男')


# 缺省参数，传递参数可以设置默认值，如果未传递对应参数，则变量是默认值

def test(name, age, gender='男'):
    print(f"您的名字是{name},年龄是{age},性别是{gender}")


print("______缺省参数_____")
test('王勇', '18')
test('王勇', '18', '女')


# 默认值只能在最后，最后一个，两个，n个，但必须在最后
def test(name, age=18, gender='男'):
    print(f"您的名字是{name},年龄是{age},性别是{gender}")


test('王勇')
# 可变参数
# 位置不定长，传递结果是元组类型,用*
print("______位置不定长_____")


def test(*name):
    print(f"您的名字是{name}")


test("王勇", '小王', 18)
# 关键字不定长,用**，结果是字典dict
print("______关键字不定长_____")


def test(**kws):
    print(kws)


test(name='王勇', age=18, id=110)


# 匿名函数
# 函数作为参数传递
def test(test1):
    result = test1(1, 2)
    print(result)


def test1(x, y):
    return x + y


test(test1)


def test_func(compute):
    result = compute(1, 2)
    print(type(result))
    print(f"结果是{result}")


def compute(x, y):
    return x + y


test_func(compute)
# lamabda只能使用一次

def test_func(compute):
    result=compute(1,2)
    print("lambda:",result)

test_func(lambda x,y:x+y)
print()
